Computers or other executing devices are ubiquitous in today's society. They come in all different varieties and can be found in places such as automobiles, laptops or home personal computers, banks, personal digital assistants, cell phones, as well as many businesses. In addition, as computers become more commonplace and software becomes more complex, there is a need for the computing devices to perform faster and more reliably in smaller and smaller packages.
As the design of computing systems continues to increase in complexity, the design phase of the system becomes more difficult and time-consuming. For example, during design of an integrated circuit, such as a multi-core processor, several thousand logic elements are placed within the circuit design by a designer, typically by using a circuit design tool. Such logic elements may include different types of flip-flops, registers, adders, AND gates, NAND gates, multiplexers and the like. Those of ordinary skill in the art will recognize the various components that are typically included in a VLSI circuit design. Each of these components typically form blocks that are then placed within the design by the designer so that each block communicates with the other blocks in the design to create the functionality of the circuit. Some common circuit blocks include control blocks (blocks designed to provide control signals to other blocks within the circuit design) and datapath blocks (blocks that include computational components to perform computations on data within the circuit), among other types of blocks of circuit components.
The design of control blocks, including the placement of the components that comprise the control block, is typically done through the use of one or more placement or design tools. This is because the design of the control block is highly dependent on the desired functionality of the circuit being designed and comports with the timing constraints desired through the circuit design. Datapath blocks, on the other hand, are usually more routine in design since the components of the datapath block may be used to perform generic arithmetic and logical operations on the data used by the circuit. As such, placement tools for datapath blocks are not commonly used, but rather, the design of datapath blocks is typically performed manually by a designer of the circuit. However, such manual designs may take a considerable amount of time to complete. Further, designers generally do not attempt to optimize the placement of the components within the datapath block, although optimization of the placement of the components may increase the performance metrics of the circuit design.
It is with these and other issues in mind that various aspects of the present disclosure were developed.